#include "aalib.h"
#include "aaint.h"
void aa_puts(aa_context * c, int x, int y, enum aa_attribute attr, __AA_CONST char *s)
{
	char s1[10000];
	int pos, pos1;
	int x1, y1;
	if (x < 0 || y < 0 || x >= aa_scrwidth(c) || y >= aa_scrheight(c))
		return;
	x1 = x;
	y1 = y;
	for (pos = 0; s[pos] != 0 && pos < 10000; pos++) {
		s1[pos] = s[pos];
		pos1 = x1 + y1 * aa_scrwidth(c);
		c->textbuffer[pos1] = s[pos];
		c->attrbuffer[pos1] = attr;
		x1++;
		if (x1 >= aa_scrwidth(c)) {
			x1 = 0;
			y1++;
			if (y1 >= aa_scrheight(c))
				break;
		}
	}
}
void aa_resizehandler(aa_context * c, void (*handler) (aa_context *))
{
	c->resizehandler = handler;
}

void aa_hidecursor(aa_context * c)
{
	c->cursorstate--;
	if (c->cursorstate == -1 && c->driver->cursormode != NULL)
		c->driver->cursormode(c, 0);
}
void aa_showcursor(aa_context * c)
{
	c->cursorstate++;
	if (c->cursorstate == 0 && c->driver->cursormode != NULL)
		c->driver->cursormode(c, 1);
	aa_gotoxy(c, c->cursorx, c->cursory);
}
void aa_gotoxy(aa_context * c, int x, int y)
{
	if (c->cursorstate >= 0) {
		if (x < 0)
			x = 0;
		if (y < 0)
			y = 0;
		if (x >= aa_scrwidth(c))
			x = aa_scrwidth(c) - 1;
		if (y >= aa_scrheight(c))
			y = aa_scrheight(c) - 1;
		c->driver->gotoxy(c, x, y);
		c->cursorx = x;
		c->cursory = y;
	}
}
